7F04FC3C	V0= amount of ammo received from 07 clip object
	accepts: A0=p->obj.data
27BDFFE0	ADDIU	SP,SP,FFE0
AFBF0014	SW	RA,0014 (SP)
8C8E0080	LW	T6,0080 (A0)	;T6=ammo type
24030001	ADDIU	V1,R0,0001	;V1=1: default amount of ammo
25CFFFFF	ADDIU	T7,T6,FFFF	;T7=T6-1: type-1
2DE1000E	SLTIU	AT,T7,000E
10200013	BEQ	AT,R0,7F04FCA4	;only process types 1-E
000F7880	SLL	T7,T7,0x2	;T7=type->offset
3C018005	LUI	AT,8005
002F0821	ADDU	AT,AT,T7
8C2F3060	LW	T7,3060 (AT)	;T7=80053060+offset: TLB jump for each type
01E00008	JR	T7
00000000	NOP
//7F04FC70:	type 1
1000000C	BEQ	R0,R0,7F04FCA4
2403000A	ADDIU	V1,R0,000A
//7F04FC78:	type 2
1000000A	BEQ	R0,R0,7F04FCA4
2403000A	ADDIU	V1,R0,000A
//7F04FC80:	type 3
10000008	BEQ	R0,R0,7F04FCA4
2403000A	ADDIU	V1,R0,000A
//7F04FC88:	type 4
10000006	BEQ	R0,R0,7F04FCA4
24030005	ADDIU	V1,R0,0005
//7F04FC90:	type C
10000004	BEQ	R0,R0,7F04FCA4
24030005	ADDIU	V1,R0,0005
//7F04FC98:	type D
10000002	BEQ	R0,R0,7F04FCA4
24030003	ADDIU	V1,R0,0003
//7F04FCA0:	type E
24030004	ADDIU	V1,R0,0004
//7F04FCA4:
28610002	SLTI	AT,V1,0002
5420000F	BNEL	AT,R0,7F04FCE8	;quit if only 0-1 ammo present
8FBF0014	LW	RA,0014 (SP)
//7F04FCB0:	test multiplayer
0FC26919	JAL	7F09A464	;returns V0=# players
AFA3001C	SW	V1,001C (SP)	;SP+1C= ammo
24010001	ADDIU	AT,R0,0001
14410009	BNE	V0,AT,7F04FCE4	;branch if multiplayer
8FA3001C	LW	V1,001C (SP)	;V1= ammo
//7F04FCC4:	solo ammo multiplier
44832000	MTC1	V1,F4
3C018003	LUI	AT,8003
C4280B28	LWC1	F8,0B28 (AT)	;F8=80030B28: ammo multiplier
468021A0	CVT.S.W	F6,F4	;F6= (float) ammo
46083282	MUL.S	F10,F6,F8	;F10= ammo * mult
4600540D	TRUNC.W.S	F16,F10
44038000	MFC1	V1,F16		;V1=new ammo
00000000	NOP
//7F04FCE4:	return
8FBF0014	LW	RA,0014 (SP)
27BD0020	ADDIU	SP,SP,0020
00601025	OR	V0,V1,R0	;V0=V1: amount of ammo
03E00008	JR	RA
00000000	NOP

7F04FCF8	V0= amount of ammo received from 08 item object
	accepts: A0=p->obj.data
27BDFFE0	ADDIU	SP,SP,FFE0
AFBF0014	SW	RA,0014 (SP)
AFA40020	SW	A0,0020 (SP)	;SP+20= p->obj.data
0FC1A50B	JAL	7F06942C	;ret V0= ammo type for weapon A0
80840080	LB	A0,0080 (A0)	;A0= weapon type
8FAF0020	LW	T7,0020 (SP)	;T7= p->obj.data
2448FFFF	ADDIU	T0,V0,FFFF	;T0= type-1
24030001	ADDIU	V1,R0,0001	;V1=1: default amount of ammo
8DF80008	LW	T8,0008 (T7)	;T8=object bitflags upper word
2D01000E	SLTIU	AT,T0,000E	;AT=TRUE if type 1-E
0018C840	SLL	T9,T8,0x1
07210003	BGEZ	T9,7F04FD34	;branch if 0x40000000 not set
00000000	NOP
10000028	BEQ	R0,R0,7F04FDD0	; kill if 0x40000000 set...
00001025	OR	V0,R0,R0
//7F04FD34:	jump to specific ammo routine
10200015	BEQ	AT,R0,7F04FD8C	;skip if aboe type E
00084080	SLL	T0,T0,0x2
3C018005	LUI	AT,8005
00280821	ADDU	AT,AT,T0	;AT=type -> offest
8C283098	LW	T0,3098 (AT)	;T0=8005308+offset: TLB jump for each type
01000008	JR	T0
00000000	NOP
//7F04FD50:	type 1
1000000E	BEQ	R0,R0,7F04FD8C
2403000A	ADDIU	V1,R0,000A
//7F04FD58:	type 2
1000000C	BEQ	R0,R0,7F04FD8C
2403000A	ADDIU	V1,R0,000A
//7F04FD60:	type 3
1000000A	BEQ	R0,R0,7F04FD8C
2403000A	ADDIU	V1,R0,000A
//7F04FD68:	type 4
10000008	BEQ	R0,R0,7F04FD8C
24030005	ADDIU	V1,R0,0005
//7F04FD70:	type C
10000006	BEQ	R0,R0,7F04FD8C
24030005	ADDIU	V1,R0,0005
//7F04FD78:	type D
10000004	BEQ	R0,R0,7F04FD8C
24030003	ADDIU	V1,R0,0003
//7F04FD80:	type E
10000002	BEQ	R0,R0,7F04FD8C
24030004	ADDIU	V1,R0,0004
//7F04FD88:	type B
24030003	ADDIU	V1,R0,0003
//7F04FD8C:	test amount of ammo
28610002	SLTI	AT,V1,0002
5420000F	BNEL	AT,R0,7F04FDD0	;quit if 0 or 1 ammo received
00601025	OR	V0,V1,R0
//7F04FD98:	determine if multiplayer
0FC26919	JAL	7F09A464	;ret V0=# players
AFA30018	SW	V1,0018 (SP)	;SP+18= ammo
24010001	ADDIU	AT,R0,0001
14410009	BNE	V0,AT,7F04FDCC	;branch if multi
8FA30018	LW	V1,0018 (SP)	;V1= ammo
//7F04FDAC:	solo ammo multiplier
44832000	MTC1	V1,F4
3C018003	LUI	AT,8003
C4280B28	LWC1	F8,0B28 (AT)	;F8=80030B28: ammo multiplier
468021A0	CVT.S.W	F6,F4	;F6= (float) ammo
46083282	MUL.S	F10,F6,F8	;F10= ammo * mult
4600540D	TRUNC.W.S	F16,F10
44038000	MFC1	V1,F16		;V1=new ammo
00000000	NOP
//7F04FDCC:	return
00601025	OR	V0,V1,R0	;V0=V1: ammo
8FBF0014	LW	RA,0014 (SP)
27BD0020	ADDIU	SP,SP,0020
03E00008	JR	RA
00000000	NOP
